Web calculator

Calculator

题目描述


打开链接,网页如下

做题准备

  1. 安装requests库
    网址:http://cn.pythonrequests.org/zh_CN/latest/user/install.html#install
    我是Windows系统,选择安装的压缩包,解压缩后,把整个文件夹复制到Python的Lib目录下即可。
  2. requests库的使用 http://cn.python-requests.org/zh_CN/latest/user/quickstart.html#url

题目分析

要用1.5s计算出结果,并且每次刷新calculator,算数表达式都会变,那么按照平常的计算方式肯定是行不通的,根据题目提示,可以用requests库来解决,要解决的问题:

  1. 怎样从服务器那获得算术表达式,计算出结果?
  2. 怎样把计算出的结果提交给服务器?
  3. 让服务器知道获取算式和提交结果的是一个人?

解题步骤

  • 问题1:需要爬取网页信息,用正则表达式。(导入re模块)
    Python通过re模块提供对正则表达式的支持。使用re的一般步骤是先将正则表达式的字符串形式编译为Pattern实例,然后使用Pattern实例处理文本并获得匹配结果(一个Match实例),最后使用Match实例获得信息,进行其他的操作。

  • 问题2:requests里的get
    传递 URL 参数
    你也许经常想为 URL 的查询字符串(query string)传递某种数据。如果是手工构建 URL,那么数据会以键/值对的形式置于 URL 中,跟在一个问号的后面。例如, httpbin.org/get?key=val。 Requests 允许你使用 params 关键字参数,以一个字符串字典来提供这些参数。举例来说,如果你想传递 key1=value1 和 key2=value2 到 httpbin.org/get ,那么可以使用如下代码:

    1
    2
    payload = {'key1': 'value1', 'key2': 'value2'}
    r = requests.get("http://httpbin.org/get", params=payload)
  • 问题3:使用session会话
    session是一次浏览器和服务器的会话对象,session也是缓存,是内容,是块数据。
    因为我们访问网页使用的HTTP协议是无状态的,没有任何关系,快速的。所以我们如果想要关联客户的信息就需要一种办法能够把客户的信息联系在一起,这个方法就是cookie。但是cookie是把信息储存在用户本地,它在一个域名下是全局的。不安全又很容易的被修改。所以session就出现了,它储存在服务器上,通过它关联同一个用户的信息,这样用户在访问不同的页面的时候我们就知道对方是同一个人,而不需要每次无状态的访问都需要用户登录/关联了。

脚本代码

1
2
3
4
5
6
7
8
9
10
11
import requests
import re
s = requests.Session()
t = s.get('http://123.207.149.64:23331/calculator/')
print(t.text)
value = re.compile(r'<form action="" method="GET"><span id="exp">(.*?)</span>')
n = re.findall(value, t.text, re.S | re.M)
print('result:\n\n%s=%d\n' % (n, eval(n)))
ans = eval(n)
f = t.get('http://123.207.149.64:23331/calculator/', params={'answer': ans})
print(f.text)

结果运行时出现错误:AttributeError: module ‘requests’ has no attribute ‘session’,查了安装的requests库,里边有session模块,但就是运行说没有!!查了好多原因,也重装了requests,还是不行,做这个题用了太长时间了,今天脑子被他弄得晕晕的,决定明天在弄。

文章目录
  1. 1. Calculator
    1. 1.1. 题目描述
    2. 1.2. 做题准备
    3. 1.3. 题目分析
    4. 1.4. 解题步骤
    5. 1.5. 脚本代码